package abd.pr1.Mappers;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import abd.pr1.Models.ComentarioSerie;
import abd.pr1.Models.Personaje;
import abd.pr1.Models.Serie;

public class PersonajesMapper extends AbstractMapper<Personaje, Integer>{

	private static final String[] PERSONAJES_KEY_COLUMN_NAMES = new String[] { "id" };
	private static final String[] PERSONAJES_COLUMN_NAMES = new String[] { "id","nombre", "descripcion"};
	private static final String PERSONAJES_TABLE_NAME = "personajes";
	
	public PersonajesMapper(DataSource ds) {
		super(ds);
	}

	@Override
	protected String getTableName() {
		return PERSONAJES_TABLE_NAME;
	}

	@Override
	protected String[] getColumnNames() {
		return PERSONAJES_COLUMN_NAMES;
	}

	@Override
	protected Object[] serializeObject(Personaje object) {
		return new Object[] { object.getId(),object.getNombre(), object.getDescripcion()};
	}

	@Override
	protected String[] getKeyColumnNames() {
		return PERSONAJES_KEY_COLUMN_NAMES;
	}

	@Override
	protected Object[] serializeKey(Integer key) {
		return new Object[] { key };
	}

	@Override
	protected Personaje buildObject(ResultSet rs) throws SQLException {
		Integer id = rs.getInt("id");
		String nombre = rs.getString("nombre");
		String descripcion = rs.getString("descripcion");
		
		return new Personaje(id, nombre, descripcion);
	}

	@Override
	protected Integer getKey(Personaje object) {
		return object.getId();
	}

	@Override
	protected boolean hasAutoincrementKey() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	void updateKeys(ResultSet rs, Personaje object) throws SQLException {
		Integer id = rs.getInt(1);
		object.setId(id);	
		
	}

	public List<Personaje> buscarNombrePersonaje(String nombre){
		nombre = "%"+nombre+"%";
		QueryCondition condicion = new QueryCondition("nombre", Operator.LIKE, nombre);
		return findByConditions(new QueryCondition[] {condicion});
	}
	
	
}
